package cn.ffcs.security.web;

import java.util.HashMap;
import java.util.List;

import org.apache.commons.lang.StringUtils;

import cn.ffcs.base.web.BaseAction;
import cn.ffcs.security.model.Role;
import cn.ffcs.security.model.RoleRelaUser;
import cn.ffcs.security.model.User;
import cn.ffcs.security.service.RoleService;
import cn.ffcs.security.service.UserService;

/**
 * 
 * 角色与用户关联关系 action层，进行业务逻辑操作<br/> <table>
 * <tr>
 * <td>负责人/principal: </td>
 * <td colspan="2">liuzhh</td>
 * <tr>
 * <td>修改记录/revision:</td>
 * <td colspan="2"></td>
 * </tr>
 * <tr>
 * <td>日期:</td>
 * <td>修改人:</td>
 * <td>修改说明:</td>
 * </tr>
 * <tr>
 * <td></td>
 * <td></td>
 * <td></td>
 * </tr>
 * </table>
 * @author liuzhh
 * @version $Id$
 */
public class RoleRelaUserAction<R extends RoleRelaUser> extends BaseAction<R>
{

    /** 网络标识 */
    private static final long serialVersionUID = -8246546789872993515L;
    /** 业务POJO **/
    private R roleRelaUser;
    /** 业务列表数据 **/
    private List<R> roleRelaUsers;
    /** 用户ID **/
    private String userID;
    /** 角色服务 **/
    @SuppressWarnings("unchecked")
    private RoleService roleService;
    /** 角色列表数据 **/
    private List<Role> roles;
    /** 已选择角色 **/
    private String selectedRoles;
    /** 用户服务 **/
    @SuppressWarnings("unchecked")
    private UserService userService;
    
    /**
     * 
     * 初始化业务数据
     * @return
     */
    @SuppressWarnings("unchecked")
    public String init(){
        
        //获取所有角色数据
        roles=roleService.findAll();
        //获取用户角色数据
        HashMap<String, Object> hmCond=new HashMap<String, Object>();
        hmCond.put("user.id", roleRelaUser.getUser().getId());
        setConds(hmCond);
        roleRelaUsers=findBy();
        //初始化已选择资源数据
        String selRole="";
        for (RoleRelaUser r:roleRelaUsers){
            if (StringUtils.isEmpty(selRole)){
                selRole=r.getRole().getId().toString();
            }else{
                selRole+=","+r.getRole().getId().toString();
            }
        }
        selectedRoles=selRole;
        //获取实体
        User user=(User)userService.findById(roleRelaUser.getUser().getId());
        roleRelaUser.setUser(user);
        
        return SUCCESS;  
    }
    
    /**
     * 
     * 保存角色数据
     * @return
     */
    public String saveRoleRelaUser(){
        //先删除对应角色数据
        baseService.deleteBy(roleRelaUser, "user", roleRelaUser.getUser().getId().toString());
        
        //数据保存 操作; 
        if (StringUtils.isNotEmpty(selectedRoles)){
            String[] roles=selectedRoles.split(",");
            for (String roleId:roles){
                roleRelaUser.setId(null);
                Role role=new Role();
                role.setId(Integer.parseInt(roleId));
                roleRelaUser.setRole(role);
                baseService.saveOrUpdate(roleRelaUser);
            }
        }
        
        //初始化
        init();
        
        return SUCCESS;        
    }
    
    /**
     * 
     * 初始化页面数据
     * @return
     */
    @SuppressWarnings("unchecked")
    public String authRole()
    {
        //获取所有角色数据
//        roles=roleService.findAll();
        //获取用户角色数据
//        roleRelaUsers=findBy();
        //获取实体
//        User user=(User)userService.findById(roleRelaUser.getUser().getId());
//        roleRelaUser.setUser(user);
        //初始化
        init();
        
        return SUCCESS;
    }
    
    /**
     * 获取业务POJO
     * @param roleRelaUsers
     */
    public R getRoleRelaUser()
    {
        return roleRelaUser;
    }

    /**
     * 设置业务POJO
     * @param roleRelaUsers
     */
    public void setRoleRelaUser(R roleRelaUser)
    {
        this.roleRelaUser = roleRelaUser;
    }

    /**
     * 获取输出结果集合
     * @param roleRelaUsers
     */
    public List<R> getRoleRelaUsers()
    {
        return roleRelaUsers;
    }
    
    /**
     * 设置输出结果集合
     * @param roleRelaUsers
     */
    public void setRoleRelaUsers(List<R> roleRelaUsers)
    {
        this.roleRelaUsers = roleRelaUsers;
    }

    /**
     * @return 用户ID
     */
    public String getUserID()
    {
        return userID;
    }

    /**
     * 设置用户ID
     * @param userID 
     */
    public void setUserID(String userID)
    {
        this.userID = userID;
    }

    /**
     * @return 角色服务
     */
    @SuppressWarnings("unchecked")
    public RoleService getRoleService()
    {
        return roleService;
    }

    /**
     * 设置角色服务
     * @param roleService 角色服务
     */
    @SuppressWarnings("unchecked")
    public void setRoleService(RoleService roleService)
    {
        this.roleService = roleService;
    }

    /**
     * @return 角色列表数据
     */
    public List<Role> getRoles()
    {
        return roles;
    }

    /**
     * 设置角色列表数据
     * @param roles 角色列表数据
     */
    public void setRoles(List<Role> roles)
    {
        this.roles = roles;
    }

    /**
     * @return the selectedRoles
     */
    public String getSelectedRoles()
    {
        return selectedRoles;
    }

    /**
     * @param selectedRoles the selectedRoles to set
     */
    public void setSelectedRoles(String selectedRoles)
    {
        this.selectedRoles = selectedRoles;
    }

    /**
     * @return the userService
     */
    public UserService getUserService()
    {
        return userService;
    }

    /**
     * @param userService the userService to set
     */
    public void setUserService(UserService userService)
    {
        this.userService = userService;
    }

}
